package com.example.d2_recursion;

/**
 * 目标：啤酒问题
 */
public class RecursionTest6 {
    // 总酒数
    private static int totalNumber;
    // 剩余的瓶子数量
    private static int lastBottleNumber;
    // 剩余盖子数量
    private static int lastCoverNumber;

    public static void main(String[] args) {
        // 啤酒问题：啤酒2元一瓶,4瓶盖可以换一瓶,2个空瓶可以换一瓶,请问10元可以和多少瓶
        buy(10);
        System.out.println("可以购买的饮料数量为：" + totalNumber);
        System.out.println("剩余的瓶子数量为：" + lastBottleNumber);
        System.out.println("剩余的盖子数量为：" + lastCoverNumber);
    }

    /**
     * 使用指定金额购买饮料,并处理空瓶和瓶盖的兑换
     *
     * @param money 用于购买饮料的金额
     */
    public static void buy(int money) {
        // 根据金额计算可以购买的饮料数量
        int buyNumber = money / 2;
        // 更新总共购买的饮料数量
        totalNumber += buyNumber;

        // 计算当前购买的饮料数量加上上次剩余的空瓶数量,得到所有空瓶数量
        int allBottleNumber = buyNumber + lastBottleNumber;
        // 根据所有空瓶数量计算可以兑换的瓶盖数量
        int allCoverNumber = buyNumber + lastCoverNumber;

        // 初始化当前总的可兑换金额
        int allMoney = 0;

        // 如果空瓶数量大于等于2,可以兑换成钱
        if (allBottleNumber >= 2) {
            allMoney += (allBottleNumber / 2) * 2;
        }
        // 更新兑换后剩余的空瓶数量
        lastBottleNumber = allBottleNumber % 2;

        // 如果瓶盖数量大于等于2,可以兑换成钱
        if (allCoverNumber >= 4) {
            allMoney += (allCoverNumber / 4) * 2;
        }
        // 更新兑换后剩余的瓶盖数量
        lastCoverNumber = allCoverNumber % 4;

        // 如果总的可兑换金额大于等于2,可以继续购买饮料
        if (allMoney >= 2) {
            buy(allMoney);
        }
    }
}
